工控系统安全2——PLC攻击种类研究
PLC(Programmable Logic Controller,可编程逻辑控制器)是关键基础设施中的基础控制设备,其安全性涉及到整个控制系统的稳定运行。但是,随着两化融合的不断加深以及工业4.0的推进,工业控制系统在提高信息化水平的同时,其信息安全问题也日益突出。PLC遭受黑客攻击的途径也日益翻新,各种木马和病毒变体数量不断攀升,威胁工业控制系统的安全稳定运行和人员生命财产安全。上篇我们介绍了常见的几种PCL遭受的攻击路径,本篇再给大家介绍PCL遭受攻击的3个种类,进一步警醒大家:工业控制系统安全防护任重道远。
PLC遭受攻击的种类
PLC遭受攻击的种类按照攻击难易程度可以分为干扰性攻击、组态攻击和固件攻击。
三类攻击的描述如下表所示:
表1 攻击的分类、描述及危害
干扰性攻击
干扰性攻击主要用于耗尽PLC的资源,比如网络带宽、CPU计算资源等,从而使得PLC对正常的请求无法及时作出回应。华北电力大学举办的工控大赛上,初级攻击层次使用的就是DDoS(Distributed Denial of Service,分布式拒绝服务)的方式,使得PLC的通信模块拒绝服务,导致用户界面显示异常。另外也可以利用PLC通信缺乏认证和加密的缺陷,直接修改PLC的控制点位的数据,但是由于PLC自身的扫描周期比较短,因此,达到此种攻击需要攻击者使用的攻击机性能比较强大,发包速度比较快。而且这种攻击在停止后,一般PLC能恢复正常的运转。
Newman等[2]指出,在监狱中用来控制牢房和监狱大门的PLC可以远程打开或者锁死。一旦PLC被攻陷,就可以操作PLC控制的所有设施的物理状态:抑制发送给PLC或者由PLC发出的告警信息。McLaughlin等[3]开发了一款PLC攻击软件,对PLC的通信和控制过程进行分析,并生成动态的PLC通信载荷。不去修改PLC的组态,但是会对PLC的正常运行造成极大的危害,比如:打开变电站中的所有断路器。Abbasi等[4]开发出一款无法被检测到的PLC Rootkit,可能会比Stuxnet更加危险,因为Stuxnet的设计目标在于指向Windows架构之上的应用软件,而PLC Rootkit立足于更加底层的系统。该恶意软件会干扰PLC运行时与逻辑同I/O外设之间的连接(如图1),驻留在PLC组件的动态内存之中,且操纵相关的I/O及PLC流程(如图2),同时影响PLC进行通信交互以及处理物理流程控制的I/O模块。
图1 PLC RootKit攻击过程
图2 I/O 针脚复用攻击示意图
Tzokatziou等[5]指出,可以通过HID(human interface devices)对PLC的正常运行实施干扰。利用ABB PM564 PLC通信协议无加密、无认证的特性,使用Codesys系统和PLC建立通信并分析数据包指令,人为构造数据包,达到任意启停PLC的目的。
目前出现了专门针对PLC的勒索软件[5],也就是对工业控制系统进行加密,只有在支付一定数额的赎金之后才能获取解密密钥。这种攻击对PLC的组态并未破坏,但是在遭受攻击期间无法正常工作。
02
组态攻击
组态攻击是对PLC的组态进行攻击,破坏PLC的控制逻辑,从而达到精准实施攻击的目标。Kclik等[6]开发了PLCinject工具,可以对PLC注入篡改后的组态,使得PLC的逻辑执行跳转到攻击者指定的功能块上。它利用PLC编程语言STL编写端口扫描器和SOCKS代理,首先下载PLC组态OB1,在组态开始执行前加入CALL指令,调用恶意功能块FC666,启动SNMP扫描器,然后运行以下5步骤:
(1)获取本地IP地址和子网
(2)计算IP地址
(3)建立UDP连接
(4)发送SNMP请求数据包
(5)接收SNMP回复数据包
(6)将回复数据包保存在DB中
(7)停止扫描,断开UDP连接
组态注入过程如图3所示:
图3 PLC组态注入过程
Langner等[2] 利用编译后的十四字节序列,注入到原来PLC合法的组态OB1之前,设置终止条件,随时都可以终止PLC的运行。14字节的代码如下所示:
7E 63 00 0C 38 07 11 12 25 00 39 A0 05 00
McLaughlin等[13]通过连接到Internet的PLC,分析PLC的逻辑控制,并自动生成恶意代码,编译后注入PLC,从而更改PLC的组态。
但是组态攻击要达到比较准确的目标,往往需要对PLC的组态进行分析,找到攻击点的准确定位。典型的如Stuxnet[6]。
03
固件攻击
原来的攻击都针对于PLC的上层系统,比如针对人机交互界面(HMI)和网络通信协议(比如Modbus协议)。即使是攻击手段较为复杂的Stuxnet,也是针对Siemens PLC的编程软件,而不是底层的现场设备代码。
在PLC架构中,固件充当了操作系统的角色,提供了诸多服务,比如通过web服务器远程访问、远程固件升级等。这些功能给终端用户的操作提供了极大的便利,但是同时也给攻击者以可乘之机,如图4所示[7]。
图4 PLC组态、固件、硬件模型
针对PLC的固件攻击是目前最为隐蔽的攻击方式,实现起来比较复杂,一般分三步进行:
(1)对PLC的固件进行反汇编,确定各个参数的寄存器地址,匹配已知的设备功能;
(2)注入恶意指令、修改跳转指令或者修改寄存器地址,且一般不影响上层组态软件的稳定性;
(3)对固件进行重新打包并重新下载到PLC中。
Schuett等[7]首先通过逆向工程,分析PLC的固件映像的指令集,找到固件的存储区域和执行路径,然后修改固件中的服务和控制指令,从而实施远程攻击:设定时间终止PLC运行、收到控制信号终止PLC运行、对固件做永久修改使得操作员无法重新使用PLC。PLC固件的一个缺陷就是信任其内在的固件验证过程,这个过程依赖于CRC校验机制。CRC校验可以用来验证固件是否受到破坏,但是无法检测到恶意篡改。图5显示了对固件诊断例程的修改。
图5 对PLC固件诊断例程修改过程
Beresford等[1]实现了针对Siemens Simatic S7 PLC的固件攻击。Garcia等[8]详细介绍了针对PLC的固件攻击全过程,利用内嵌的固件升级机制、在线代码注入等达到固件攻击的目的。具体的攻击过程如图6所示:
图6 PLC固件双向攻击过程
通过双向修改实现攻击过程,修改PLC的控制指令,从而摧毁物理世界;同时修改传感器的测量值,使得操作员看到“合理”的数值,从而达到隐藏攻击,避开检测的目标。
综上所述
PLC的安全态势不容乐观,针对PLC的攻击路径比较多,而且攻击层次在逐渐深入,做好PLC的安全防护任重道远。
参考文献
[1]Beresford D. Exploiting siemens simatic s7 plcs[J]. Black Hat USA, 2011, 16(2): 723-733.
[2]Newman T, Rad T, ELCnetworks L L C, et al. SCADA & PLC vulnerabilities in correctional facilities[J]. Core Security, 2011.
[3]McLaughlin S E. On Dynamic Malware Payloads Aimed at Programmable Logic Controllers[C]//HotSec. 2011.
[4]Abbasi A, Hashemi M. Ghost in the PLC: Designing an Undetectable Programmable Logic Controller Rootkit via Pin Control Attack[J]. 2016.
[5]Formby D, Durbha S, Beyah R. Out of control: Ransomware for industrial control systems[J]. 2017.
[6]Klick J, Lau S, Marzin D, et al. Internet-facing PLCs-a new back orifice[J]. Blackhat USA, 2015.
[7]Schuett C, Butts J, Dunlap S. An evaluation of modi-fication attacks on programmable logic controllers[J]. International Journal of Critical Infrastructure Protec-tion, 2014, 7(1): 61-68.
[8]Garcia L, Zonouz S, Dong W, et al. Detecting PLC control corruption via on-device runtime verifica-tion[C]// Resilience Week. IEEE, 2016:67-72.
中国保密协会
科学技术分会
长按扫码关注我们
作者:徐 震 周晓军
责编:蔡北平
往期精彩文章TOP5回顾
近期精彩文章回顾